package es.antonio.duarte.abrahamAdmin.servicios;

import java.util.Collection;
import java.util.Date;

import es.antonio.duarte.abrahamAdmin.dao.DiarioDAO;
import es.antonio.duarte.abrahamAdmin.model.Diario;

/**
 * Implementacion del servicio de diario de la plantilla.
 * @author Antonio Duarte
 */
@SuppressWarnings("unchecked")
public class DiarioServicioImpl implements DiarioServicio {
   /**
    * Texto con el que rellenar las excepciones.
    */
   private String mensaje = "Debe introducir una parámetro en este método";
   /**
    * El dao asociado a la clase Caracteristicas con el que iremos a la base de datos.
    */
   private DiarioDAO diarioDAO;
   /**
    * Recuperamos el dao  asociado a Diario.
    * @return DiarioDAO El dao de diario.
    */
   public DiarioDAO getDiarioDAO() {
      return diarioDAO;
   }
   /**
    * Spring usará este método para inyectar el dao de Diario.
    * @param diarioDAO El dao de Diario.
    */
   public void setDiarioDAO(final DiarioDAO diarioDAO) {
      this.diarioDAO = diarioDAO;
   }

   /**
    * Inserta la entidad proporcionada.
    * @param entidad Entidad que se desea insertar a la BBDD
    */
   public void insertar(final Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }
      diarioDAO.insertar(entidad);
   }

   /**
    * Actualiza la entidad proporcionada.
    * @param entidad Entidad que se desea actualizar en la BBDD
    */
   public void actualizar(final Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }

      diarioDAO.actualizar(entidad);
   }

   /**
    * Elimina la entidad proporcionada.
    * @param entidad Entidad que se desea eliminar de la BBDD
    */
   public void eliminar(final Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }

      diarioDAO.eliminar(entidad);
   }

   /**
    * Consulta de todas los diarios de la plantilla. Podra recibir un
    * objeto o ser invocado sin parametros.
    * @return Lista de diario de la plantilla (vacia si no hay
    *         registros)
    * @param objeto Objeto con el que se realizara la consulta
    */
   public Collection consultar(final Object... objeto) {
      return diarioDAO.consultar(Diario.class);
   }

   /**
    * Consulta los diarios de la plantilla que concuerden con el id
    * proporcionado.
    * @return Objeto Diario asociada al id proporcionado
    * @param id La id del objeto que se quiere recuperar.
    */
   public Object consultarPorId(final Long id) {
      if (id == null) {
         throw new IllegalArgumentException(mensaje);
      }
      return diarioDAO.consultarPorId(id, Diario.class);
   }

   /**
    * Consulta los diarios de la plantilla que contengan el texto con el cuerpo proporcionado.
    * @return Objeto Diario asociada al id proporcionado
    * @param cu El texto o parte de él del cuerpo del objeto que se quiere recuperar.
    */
	public Collection consultarPorCuerpo(String cu) {
		if (cu == null) {
	         throw new IllegalArgumentException(mensaje);
	      }
	      return diarioDAO.consultarPorCuerpo(cu);
	}
	/**
	    * Consulta los diarios de la plantilla que coincidan con la fecha.
	    * @return Objeto Diario asociada a la fecha
	    * @param fecha La fecha del objeto que se quiere recuperar.
	    */
	public Collection consultarPorFecha(Date fecha) {
		if (fecha == null) {
	         throw new IllegalArgumentException(mensaje);
	      }
	      return diarioDAO.consultarPorFecha(fecha);
	}
	/**
	    * Consulta los diarios de la plantilla que coincidan con la fecha.
	    * @return Objeto Diario asociada a la fecha
	    * @param fecha La fecha del objeto que se quiere recuperar.
	    */public Collection consultarPorTitulo(String ti) {
	    	if (ti == null) {
		         throw new IllegalArgumentException(mensaje);
		      }
		      return diarioDAO.consultarPorTitulo(ti);
	    }
}
